package com.example.designer.singleton;

/**
 * @author zhaoyunlong
 * @date 2020/12/16
 * @description
 * 懒汉模式  lazy loading
 *    虽然达到了按需初始化的目的，但是却线程不安全
 *    可以添加synchronized来解决   但是效率不高
 *    如果使用代码同步代码块 但是依然不能可以实现线程安全
 */
public class SingletonFour {

    public static SingletonFour instance;

    private SingletonFour(){

    }

    public static  SingletonFour getInstance(){
        if (instance == null) {
            synchronized (SingletonFour.class) {
                try {
                    Thread.sleep(1);
                } catch (Exception e) {
                    e.printStackTrace();
                }
                instance = new SingletonFour();
            }
        }
        return instance;
    }

    public static void main(String[] args) {

        for (int i=0; i < 100; i++) {
            new Thread(()->{
                //不同对象的 hashcode是不一样的
                SingletonFour singleton2 = SingletonFour.getInstance();
                System.out.println(singleton2.hashCode());
            }).start();
        }
    }
}
